#ifndef QUOTE_H
#define QUOTE_H

#include <string>
/**
 * @brief  原价销售的书籍
 * 
 */
class Quote
{
public:
    // 该虚函数返回当前对象的一份动态分配的拷贝
    virtual Quote* clone() const & 
        { return new Quote(*this); }
    virtual Quote* clone() && 
        { return new Quote(std::move(*this)); }
    Quote() = default;
    Quote(const std::string &book, double sales_price)
        : bookNo(book), price(sales_price) { }
    Quote(const Quote&) = default; // 对成员依次拷贝
    Quote(Quote&&) = default; // 对成员依次拷贝
    Quote& operator= (const Quote&) = default; // 拷贝赋值
    Quote& operator= (Quote&&) = default; // 移动赋值
    std::string isbn() const 
        { return bookNo; }
    // 返回给定数量的书籍的销售总额
    // 派生类负责改写并使用不同的折扣计算算法
    virtual double net_price(std::size_t n) const
        { return n * price; } 
    virtual ~Quote() = default; // 对析构函数进行动态绑定
private:
    std::string bookNo; // 书籍的 ISBN 编号
protected:
    double price = 0.0; // 代表普通状态下不打折的价格
};

double print_total(std::ostream &os, Quote *item, size_t n);

#endif